﻿//using System;

//using System.Collections.Generic;
//using System.Text;
//using System.Drawing;
//using System.Windows.Forms;
//using DirectUI.Mobile.UI.Controls;
//using DirectUI.Mobile.UI.Drawing;
//using DirectUI.Mobile.UI;

//namespace DirectUI.Mobile.UI.Controls
//{
//    public class PageManagerBase : ControlContainer
//    {
//        private TransitionPanel navigation = new TransitionPanel();

//        protected override void InitControl()
//        {
//            bounds = new Rectangle(0, 0, 240, 300);
//            pages = new MPageCollection(this);
//            base.InitControl();
//            navigation.Anchor = AnchorStyles.None;
//            Layout();
//            Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom;
//            navigation.InternalEnableDoubleBuffer = false; 
//            controls.Add(navigation);
//            navigation.SelectedIndexChanging += new EventHandler<ChangedEventArgs<int>>(navigation_SelectedIndexChanging);
//            navigation.TransitionChange += new EventHandler<AnimationEventArgs>(navigation_TransitionChange);
//            navigation.TransitionCompleted += new EventHandler<AnimationEventArgs>(navigation_TransitionCompleted);
//            navigation.BeginTransition += new EventHandler<ChangedEventArgs<int>>(navigation_BeginTransition);
   
//        }
//        const int animDuration = 275;
//        void BackButton_Click(object sender, EventArgs e)
//        {
//            OnNavigateBack();
//        }
//        /// <summary>
//        /// Navigate back to the previous page.
//        /// </summary>
//        public void GoBack()
//        {
//            OnNavigateBack();
//        }
//        protected virtual void OnNavigateBack()
//        {
//            if (NavigateBack != null) NavigateBack(this, EventArgs.Empty);
//            int index = SelectedPageName - 1;
//            if (index >= 0)
//            {
//                StopNestedAnimations();
//                back = true;
//                BeforeNavigate(index, back);
//                navigation.Switch(index, Transition.ShiftRight, animDuration);
//            }
//        }

//        public event EventHandler NavigateBack;

//        public void Forward()
//        {
//            int index = SelectedPageName + 1;
//            if (index < pages.Count)
//            {
//                StopNestedAnimations();
//                back = false;
//                BeforeNavigate(index, false);
//                navigation.Switch(index, Transition.ShiftLeft, animDuration);
//            }
//        }

//        /// <summary>
//        /// Occurs before an animated transition starts.
//        /// </summary>
//        /// <param name="index">The target index to transit to</param>
//        /// <param name="back">True, if it is a back navigation, otherwise false.</param>
//        protected virtual void BeforeNavigate(int targetIndex, bool back)
//        {
//        }

//        private void Layout()
//        {
//            int w = Width;
//            int h = Height;
//            navigation.Bounds = new Rectangle(0, 0, w, h );
//        }

//        void navigation_BeginTransition(object sender, ChangedEventArgs<int> e)
//        {
          
//            transitionTabItem = pages[e.NewValue];
        

//#if SUPPORT_ALPHA
//            ButtonGroup bg = EnsureAnimButtons();
//            bg.BeginInit();
//            bg.Buttons.Clear();
//            foreach (DirectUIButton b in tabs[index].Buttons) bg.Buttons.Add(b);
//            bg.EndInit();
//            DirectUIButton back = EnsureAnimBackButton();
//            back.Alpha = 0;
//            back.Visible = index > 0;
//            back.Text = index > 0 ? tabs[index - 1].Title : "";
//            bg.Visible = bg.Buttons.Count > 0;
//            bg.Alpha = 0;
//#endif


//        }

       

//        private Page transitionTabItem;

//        void navigation_TransitionCompleted(object sender, AnimationEventArgs e)
//        {

//            inTransition = false;
//        }

//        void navigation_TransitionChange(object sender, AnimationEventArgs e)
//        {
    
//        }

//        private bool back = false;


//        private int minBackIndex = 0;

//        public int MinBackIndex
//        {
//            get { return minBackIndex; }
//            set
//            {
//                value = CheckBoundsMinBackIndex(value);
//                if (minBackIndex != value)
//                {
//                    minBackIndex = value;

//                }
//            }
//        }

//        private int CheckBoundsMinBackIndex(int value)
//        {
//            if (value < 0) return 0;
//            return value;
//        }

//        void navigation_SelectedIndexChanging(object sender, ChangedEventArgs<int> e)
//        {
//            OnSelectedIndexChanging(e);
//        }

//        protected virtual void OnSelectedIndexChanging(ChangedEventArgs<int> e)
//        {
//            if (Initializing) return;
//            int index = e.NewValue;
//            if (e.NewValue >= 0)
//            {
//                DirectUIControl c = Pages[index];
//                //c.Invalidate();
//                c.Focus();
//            }
//        }

     

//        public override void Dispose()
//        {
//            //header.Dispose();
//            navigation.Dispose();
//            if (dbuffer != null) dbuffer.Dispose();
//            base.Dispose();
//        }

        

//        private MPageCollection pages;

//        public MPageCollection Pages
//        {
//            get { return pages; }
//        }

//        public int SelectedPageName
//        {
//            get { return navigation.SelectedPageName; }
//            set { navigation.SelectedPageName = value; }
//        }

//        public event EventHandler<ChangedEventArgs<int>> SelectedIndexChanged
//        {
//            add { navigation.SelectedIndexChanging += value; }
//            remove { navigation.SelectedIndexChanging -= value; }
//        }

//        public Page SelectedPage
//        {
//            get { return navigation.SelectedPage as Page; }
//            set { navigation.SelectedPage = value; }
//        }

//        internal DirectUIControlCollection Controls { get { return navigation.Controls; } }


//        public void Switch(int index, Transition transition, int duration)
//        {
//            navigation.Switch(index, transition, duration);
//        }

//        protected override void OnPaintBackground(DirectUIPaintEventArgs e)
//        {
//            //  do nothing
//        }

//        private DoubleBuffer dbuffer;

//        DoubleBuffer EnsureDBuffer()
//        {
//            if (dbuffer == null) dbuffer = new DoubleBuffer();
//            return dbuffer;
//        }

//        private bool inTransition = false;

//        public override void OnPaint(DirectUIPaintEventArgs e)
//        {
//            if (inTransition)
//            {
//                DoubleBuffer buffer = EnsureDBuffer();
//                buffer.Paint(e, this, base.OnPaint, 255);
//            }
//            else
//            {
//                base.OnPaint(e);
//            }
//        }

//        public override void Invalidate(Rectangle bounds)
//        {
//            if (dbuffer != null) dbuffer.Invalidate(bounds);
//            base.Invalidate(bounds);
//        }

//        protected override void OnSizeChanged(Size oldSize, Size newSize)
//        {
//            base.OnSizeChanged(oldSize, newSize);
//            Layout();
//        }

//        protected override void PaintControls(DirectUIPaintEventArgs pe)
//        {
//            PaintControl(pe, navigation);
//        }

//        public override void OnKeyDown(KeyEventArgs e)
//        {
//            if (!e.Handled)
//            {
//                switch (e.KeyCode)
//                {
//                    case Keys.Left:
//                        e.Handled = true;
//                        OnNavigateBack();
//                        break;
//                }
//            }
//            base.OnKeyDown(e);
//        }

//        public override void OnGesture(GestureEventArgs e)
//        {
//            if (!e.IsPressed)
//            {
//                switch (e.Gesture)
//                {
//                    case Gesture.Right:
//                        e.Handled = true;
//                        e.Gesture = Gesture.None;
//                        OnNavigateBack();
//                        break;
//                    case Gesture.Left:
//                        e.Handled = true;
//                        e.Gesture = Gesture.None;
//                        Forward();
//                        break;

//                }
//            }
//            base.OnGesture(e);
//        }

//        public override void Focus()
//        {
//            SelectedPage.Focus();
//        }
//    }
//}
